package main

import "fmt"

// link: https://leetcode-cn.com/problems/merge-sorted-array/
func main() {
	nums1 := []int{1, 2, 3, 0, 0, 0}
	nums2 := []int{2, 5, 6}
	m, n := 3, 3
	merge(nums1, m, nums2, n)
	fmt.Println(nums1)
}

/**
 * @Description: 给你两个有序整数数组 nums1 和 nums2，请你将 nums2 合并到 nums1 中，使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n，这样它就有足够的空间保存来自 nums2 的元素。
*/
func merge(nums1 []int, m int, nums2 []int, n int) {
	result := make([]int, m+n)
	point1, point2, target := 0, 0, 0
	for point1 < m && point2 < n {
		if nums1[point1] < nums2[point2] {
			result[target] = nums1[point1]
			target++
			point1++
		} else if nums1[point1] >= nums2[point2] {
			result[target] = nums2[point2]
			target++
			point2++
		}
	}
	for point1 < m {
		result[target] = nums1[point1]
		target++
		point1++
	}
	for point2 < n {
		result[target] = nums2[point2]
		target++
		point2++
	}
	copy(nums1, result)
}
